/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.talend.dataquality.rules;

import org.eclipse.emf.common.util.EList;
import org.talend.dataquality.indicators.definition.IndicatorDefinition;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Match Rule Definition</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * The Match Rule Definition class.
 * This match rule class stores blocking key definitions and match rule definitions.
 * It also includes Merge (aka Survivorship) rule definitions.
 * <!-- end-model-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getBlockKeys <em>Block Keys</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getMatchRules <em>Match Rules</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getXmiId <em>Xmi Id</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getRecordLinkageAlgorithm <em>Record Linkage Algorithm</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getAppliedBlockKeys <em>Applied Block Keys</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getSurvivorshipKeys <em>Survivorship Keys</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getDefaultSurvivorshipDefinitions <em>Default Survivorship Definitions</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getMatchGroupQualityThreshold <em>Match Group Quality Threshold</em>}</li>
 *   <li>{@link org.talend.dataquality.rules.MatchRuleDefinition#getParticularDefaultSurvivorshipDefinitions <em>Particular Default Survivorship Definitions</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition()
 * @model
 * @generated
 */
public interface MatchRuleDefinition extends IndicatorDefinition {
    /**
     * Returns the value of the '<em><b>Block Keys</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.BlockKeyDefinition}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Block Keys</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Block Keys</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_BlockKeys()
     * @model containment="true"
     * @generated
     */
    EList<BlockKeyDefinition> getBlockKeys();

    /**
     * Returns the value of the '<em><b>Match Rules</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.MatchRule}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Match Rules</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Match Rules</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_MatchRules()
     * @model containment="true"
     * @generated
     */
    EList<MatchRule> getMatchRules();

    /**
     * Returns the value of the '<em><b>Xmi Id</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * <!-- begin-model-doc -->
     * stores the xmi Id generated by EMF. Maybe empty when the Definition is contained by the indicator itself. 
     * <!-- end-model-doc -->
     * @return the value of the '<em>Xmi Id</em>' attribute.
     * @see #setXmiId(String)
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_XmiId()
     * @model
     * @generated
     */
    String getXmiId();

    /**
     * Sets the value of the '{@link org.talend.dataquality.rules.MatchRuleDefinition#getXmiId <em>Xmi Id</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Xmi Id</em>' attribute.
     * @see #getXmiId()
     * @generated
     */
    void setXmiId(String value);

    /**
     * Returns the value of the '<em><b>Record Linkage Algorithm</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * <!-- begin-model-doc -->
     * The algorithm chosen for record linkage. Currently, it's either VSR (corresponding to the RecordMatcherType.simpleVSRMatcher used in tMatchGroup) or t-Swoosh (the algorithm used in MDM record linkage).
     * <!-- end-model-doc -->
     * @return the value of the '<em>Record Linkage Algorithm</em>' attribute.
     * @see #setRecordLinkageAlgorithm(String)
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_RecordLinkageAlgorithm()
     * @model
     * @generated
     */
    String getRecordLinkageAlgorithm();

    /**
     * Sets the value of the '{@link org.talend.dataquality.rules.MatchRuleDefinition#getRecordLinkageAlgorithm <em>Record Linkage Algorithm</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Record Linkage Algorithm</em>' attribute.
     * @see #getRecordLinkageAlgorithm()
     * @generated
     */
    void setRecordLinkageAlgorithm(String value);

    /**
     * Returns the value of the '<em><b>Applied Block Keys</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.AppliedBlockKey}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Applied Block Keys</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Applied Block Keys</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_AppliedBlockKeys()
     * @model containment="true"
     * @generated
     */
    EList<AppliedBlockKey> getAppliedBlockKeys();

    /**
     * Returns the value of the '<em><b>Survivorship Keys</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.SurvivorshipKeyDefinition}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Survivorship Keys</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Survivorship Keys</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_SurvivorshipKeys()
     * @model containment="true"
     * @generated
     */
    EList<SurvivorshipKeyDefinition> getSurvivorshipKeys();

    /**
     * Returns the value of the '<em><b>Default Survivorship Definitions</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.DefaultSurvivorshipDefinition}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Default Survivorship Definitions</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Default Survivorship Definitions</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_DefaultSurvivorshipDefinitions()
     * @model containment="true"
     * @generated
     */
    EList<DefaultSurvivorshipDefinition> getDefaultSurvivorshipDefinitions();

    /**
     * Returns the value of the '<em><b>Match Group Quality Threshold</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * <!-- begin-model-doc -->
     * Threshold that indicates the quality of the group of similar records. Groups having a higher quality value are considered as matches and groups having a lower value are usually considered as suspects that need a clerical review. 
     * <!-- end-model-doc -->
     * @return the value of the '<em>Match Group Quality Threshold</em>' attribute.
     * @see #setMatchGroupQualityThreshold(double)
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_MatchGroupQualityThreshold()
     * @model
     * @generated
     */
    double getMatchGroupQualityThreshold();

    /**
     * Sets the value of the '{@link org.talend.dataquality.rules.MatchRuleDefinition#getMatchGroupQualityThreshold <em>Match Group Quality Threshold</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Match Group Quality Threshold</em>' attribute.
     * @see #getMatchGroupQualityThreshold()
     * @generated
     */
    void setMatchGroupQualityThreshold(double value);

    /**
     * Returns the value of the '<em><b>Particular Default Survivorship Definitions</b></em>' containment reference list.
     * The list contents are of type {@link org.talend.dataquality.rules.ParticularDefaultSurvivorshipDefinitions}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Particular Default Survivorship Definitions</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Particular Default Survivorship Definitions</em>' containment reference list.
     * @see org.talend.dataquality.rules.RulesPackage#getMatchRuleDefinition_ParticularDefaultSurvivorshipDefinitions()
     * @model containment="true"
     * @generated
     */
    EList<ParticularDefaultSurvivorshipDefinitions> getParticularDefaultSurvivorshipDefinitions();

} // MatchRuleDefinition
